﻿using System;
using System.Linq;
using Web.Extensions;
using Web.Helpers;
using Entidades.Models.Sistema;
using System.Web.Services;
using Controladores;
using Entidades;
using Common;
using Web.Helpers.Documents.Spreadsheets.Enums;

namespace Web.Pages
{
    public partial class PlanillaDeCreditos : BasePage
    {
        #region Events

        protected new void Page_Load(object sender, EventArgs e)
        {
            base.Page_Load(sender, e);

            if (!Page.IsPostBack)
            {
                this.CargarPagina();

                this.hdnPayRollDirectory.Value = PlanillasHelper.ObtenerDirectorioPlanilla(TiposPlanilla.Credito);
            }
        }

        #endregion

        #region Private Methods

        private void CargarPagina()
        {
            var proyectos = new ProyectoControlador().ObtenerProyectosPendientesDePago(true, WellKnownKeys.Entities.TiposUsuario.ACTOR.Id);
            this.selPlanilla_Proyecto.Bind(proyectos, "Id", "Nombre");
        }
        
        #endregion

        #region Web Methods

        /// <summary>
        /// Deuelve una lista de los ítems de la Planilla Proyecto, según un Guión
        /// </summary>
        /// <param name="idGuion"></param>
        /// <returns></returns>
        [WebMethod]
        public static string obtenerPlanillaDeCreditos(int[] idsGuiones)
        {
            var mensaje = string.Empty;
            var resultado = false;
            object valor = null;
            try
            {
                var guionItems = new ControladorBase<GuionItem>().ObtenerEntidades(x => idsGuiones.Contains(x.Guion.Id));
                    guionItems = guionItems.Where(x => !x.Subtitulado).ToList();
                    guionItems = guionItems
                                .OrderBy(x => x.Guion.Proyecto.Nombre)
                                .ThenBy(x => x.Guion.Episodio)
                                .ThenBy(x => x.Guion.Titulo)
                                .ThenBy(x => x.Actor != null ? x.Actor.Apellido : String.Empty).ToList();

                var lista = guionItems.Select(guionItem => new ListaInfo()
                {
                    Id = guionItem.Id,
                    Valor = new
                    {
                        Id              = guionItem.Id,
                        IdGuion         = guionItem.Guion.Id,
                        Guion           = guionItem.Guion != null ? guionItem.Guion.Titulo : String.Empty,
                        NroEpisodio     = guionItem.Guion != null ? guionItem.Guion.Episodio : WellKnownKeys.Entities.DEFAULT_ID,
                        Nombre          = guionItem.Actor != null ? guionItem.Actor.Nombre : String.Empty, 
                        Apellido        = guionItem.Actor != null ? guionItem.Actor.Apellido : String.Empty,
                        Personaje       = guionItem.Personaje, 
                        NroMatricula    = guionItem.Actor != null ? guionItem.Actor.NroMatricula : String.Empty,
                        Telefono        = guionItem.Actor != null ? guionItem.Actor.Telefono : String.Empty, 
                        Email           = guionItem.Actor != null ? guionItem.Actor.Email : String.Empty
                    }
                }).ToList();
                valor = lista;
                resultado = true;
            }
            catch (Exception ex)
            {
                //throw ex;
                LogError(ex);
                mensaje = "Hubo un error al intentar obtener el Detalle de la Planilla." + Environment.NewLine + ex.Message;
            }
            return SessionHelper.BuildResponse(mensaje, resultado, valor);
        }

        #endregion
    }
}